package com.example.demo.api;

import com.example.demo.model.*;
import jakarta.servlet.http.HttpServletRequest;
import jakarta.servlet.http.HttpSession;
import org.apache.ibatis.javassist.compiler.ast.NewExpr;
import org.springframework.aop.scope.ScopedProxyUtils;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.transaction.annotation.Transactional;
import org.springframework.web.bind.annotation.*;

import javax.xml.transform.Source;
import java.util.ArrayList;
import java.util.HashMap;
import java.util.List;

@RestController
public class MessageSessionAPI {
    @Autowired
    private MessageSessionMapper messageSessionMapper;
    @Autowired
    private MessageMapper messageMapper;

    @GetMapping("/sessionList")
    @ResponseBody
    public Object getMessageSessionList(HttpServletRequest request){
//        1.获取到当前用户的userId(从spring的session中获取)
        List<MessageSession> list=new ArrayList<>();
        HttpSession session=request.getSession(false);
        if(session==null){
            System.out.println("session==null");
            return list;
        }
        User user=(User) session.getAttribute("user");
        if(user==null){
            System.out.println("user==null");
            return list;
        }

//        2.根据userId查询数据库,查出来有那些会话id
        List<Integer> list1=messageSessionMapper.getSessionIdsByUserId(user.getUserId());
//        3.遍历会话id,查询出每个会话里涉及的好友都有谁
        for(Integer sessionId:list1){
            MessageSession messageSession=new MessageSession();
            messageSession.setSessionId(sessionId);
            List<Friend> friends=messageSessionMapper.getFriendsBySessionId(sessionId,user.getUserId());
           messageSession.setFriends(friends);
           String lastMessage=messageMapper.getLastMessageBySessionId(sessionId);
           if(lastMessage==null){
               messageSession.setLastMessage("");
           }else {
               messageSession.setLastMessage(lastMessage);
           }
           list.add(messageSession);
        }
        return list;
    }
//    3.添加会话
    @PostMapping("/session")
    @ResponseBody
    @Transactional
    public Object addMessageSession(int toUserId, @SessionAttribute("user") User user){
//        进行数据库的插入操作
//        1.先给MessageSession表里插入数据,使用这个参数获取到sessionId
//        这里返回的是sessionId
        HashMap<String,Integer> resp=new HashMap<>();
        MessageSession messageSession=new MessageSession();
       int sessionid= messageSessionMapper.addMessageSession(messageSession);
//        给user表中插入数据
        MessageSessionUserItem messageSessionUserItem1=new MessageSessionUserItem();
        messageSessionUserItem1.setSessionId(sessionid);
        messageSessionUserItem1.setUserId(toUserId);
        messageSessionMapper.addMessageSessionUser(messageSessionUserItem1);
        MessageSessionUserItem messageSessionUserItem2=new MessageSessionUserItem();
        messageSessionUserItem2.setSessionId(sessionid);
        messageSessionUserItem2.setUserId(user.getUserId());
        messageSessionMapper.addMessageSessionUser(messageSessionUserItem2);
        resp.put("sessionId",sessionid);
        return resp;
    }





}
